/**
 * HMI 批量删除组件类型定义
 *
 * 该组件用于显示可批量删除的数据表格，支持分页、选择、删除、重置、传动等功能
 * 参考 HmiOnlySelect 的架构设计，提供统一的配置接口和事件处理
 */

// 重新导出 API 模块的类型定义
export type {
  HmiBatchDeleteRow,
  HmiBatchDeleteConfig,
  HmiBatchDeleteColumnConfig,
  HmiBatchDeleteQueryParams,
  HmiBatchDeleteRequest,
  HmiBatchResetRequest,
  HmiBatchTransRequest,
  HmiBatchDeleteResponse,
  HmiBatchDeleteEmits,
  HmiBatchDeleteProps,
} from "@/api/hmi/hmi-batch-delete.api";

/**
 * 组件内部状态接口
 */
export interface HmiBatchDeleteState {
  /** 是否正在加载 */
  loading: boolean;
  /** 表格数据 */
  tableData: HmiBatchDeleteRow[];
  /** 总数据量 */
  total: number;
  /** 选中的行 */
  selectedRows: HmiBatchDeleteRow[];
  /** 当前页码 */
  currentPage: number;
  /** 每页大小 */
  pageSize: number;
}

/**
 * 操作类型枚举
 */
export enum OperationType {
  DELETE = "delete",
  RESET = "reset",
  TRANS = "trans",
  POINT = "point",
  DOWNLOAD = "download",
  BATCH_DELETE = "batchDelete",
  BATCH_RESET = "batchReset",
  BATCH_TRANS = "batchTrans",
  BATCH_POINT = "batchPoint",
}

/**
 * 操作确认配置接口
 */
export interface OperationConfirmConfig {
  /** 操作类型 */
  type: OperationType;
  /** 确认标题 */
  title: string;
  /** 确认消息 */
  message: string;
  /** 确认按钮文本 */
  confirmButtonText?: string;
  /** 取消按钮文本 */
  cancelButtonText?: string;
  /** 消息类型 */
  messageType?: "warning" | "info" | "success" | "error";
}

/**
 * 工具栏配置接口
 */
export interface ToolbarConfig {
  /** 是否显示新增按钮 */
  showAdd?: boolean;
  /** 是否显示批量重置按钮 */
  showBatchReset?: boolean;
  /** 是否显示批量删除按钮 */
  showBatchDelete?: boolean;
  /** 是否显示批量传动按钮 */
  showBatchTrans?: boolean;
  /** 是否显示刷新按钮 */
  showRefresh?: boolean;
  /** 是否显示导出按钮 */
  showExport?: boolean;
}

/**
 * 操作列配置接口
 */
export interface ActionsConfig {
  /** 是否显示下载按钮 */
  showDownload?: boolean;
  /** 是否显示重置按钮 */
  showReset?: boolean;
  /** 是否显示删除按钮 */
  showDelete?: boolean;
  /** 是否显示传动按钮 */
  showTrans?: boolean;
  /** 操作列宽度 */
  width?: number;
}

/**
 * 表格配置接口
 */
export interface TableConfig {
  /** 是否显示选择列 */
  showSelection?: boolean;
  /** 是否高亮当前行 */
  highlightCurrentRow?: boolean;
  /** 是否显示边框 */
  border?: boolean;
  /** 表格大小 */
  size?: "large" | "default" | "small";
  /** 是否显示斑马纹 */
  stripe?: boolean;
}

/**
 * 分页配置接口
 */
export interface PaginationConfig {
  /** 每页显示条数 */
  pageSize: number;
  /** 是否显示页面大小选择器 */
  showSizeChanger?: boolean;
  /** 页面大小选项 */
  pageSizes?: number[];
  /** 分页布局 */
  layout?: string;
}

/**
 * 完整的组件配置接口
 */
export interface HmiBatchDeleteComponentConfig extends HmiBatchDeleteConfig {
  /** 工具栏配置 */
  toolbar?: ToolbarConfig;
  /** 操作列配置 */
  actions?: ActionsConfig;
  /** 表格配置 */
  table?: TableConfig;
  /** 分页配置 */
  pagination?: PaginationConfig;
}

/**
 * 组件方法接口
 */
export interface HmiBatchDeleteMethods {
  /** 刷新数据 */
  refresh: () => Promise<void>;
  /** 获取选中的行 */
  getSelectedRows: () => HmiBatchDeleteRow[];
  /** 获取选中的 ID */
  getSelectedIds: () => (string | number)[];
  /** 清空选择 */
  clearSelection: () => void;
  /** 设置选中的行 */
  setSelectedRows: (rows: HmiBatchDeleteRow[]) => void;
}

/**
 * 事件处理器类型
 */
export interface HmiBatchDeleteEventHandlers {
  /** 数据加载完成 */
  onDataLoaded?: (data: HmiBatchDeleteRow[]) => void;
  /** 选择变更 */
  onSelectionChange?: (selection: HmiBatchDeleteRow[]) => void;
  /** 行点击 */
  onRowClick?: (row: HmiBatchDeleteRow) => void;
  /** 操作成功 */
  onOperationSuccess?: (type: string, data: any) => void;
  /** 错误处理 */
  onError?: (error: Error) => void;
}

// 重新导出 API 模块的类型
import type { HmiBatchDeleteRow } from "@/api/hmi/hmi-batch-delete.api";
